// var express = require('express');
// var router = express.Router();
//登录和注册需要的User类
var User = require('../models/user');
//发表需要的Post类
var Post = require('../models/post');
//引入留言需要的Comment类
var Comment = require('../models/comment');
//需要引入一个加密的模块
var crypto = require('crypto');
//引入multer插件
var multer = require('multer');
//插件的配置信息
var storage = multer.diskStorage({
  //这个是上传图片的地址.
  destination:function(req,file,cb){
    cb(null,'public/images')
  },
  //上传到服务器上图片的名字.
  filename:function(req,file,cb){
    cb(null,file.originalname)
  }
});
var upload = multer({storage:storage,size:10225});

//一个权限的问题？
//1.用户未登录的情况下，是无法访问/post ,/logout的
//2.用户在登录的情况下，是无法访问/login,/reg 的
//那么，如果才能完成这个权限的问题呢？

function checkLogin(req, res, next) {
  if (!req.session.user) {
    req.flash('error', '未登录!');
    res.redirect('/login');
  }
  next();
}
//如果登录了，是无法访问登录和注册页面的
function checkNotLogin(req, res, next) {
  if (req.session.user) {
    req.flash('error', '已登录!');
    res.redirect('back');//返回之前的页面
  }
  next();
}
/* GET home page. */
module.exports = function(app){
  app.get('/',function(req,res){
    res.render('index');
  });
  //注册页面
  app.get('/reg',function(req,res){
    res.render('reg',{
      title:'注册',
      user:req.session.user,
      success:req.flash('success').toString(),
      error:req.flash('error').toString()
    });
  });
  //注册行为
  app.post('/reg',function(req,res){
    //接受数据使用req.body
    //用户名
    var name = req.body.name;
    //密码
    var password = req.body.password;
    //确认密码
    var password_re =req.body['password-repeat'];
    //邮箱
    var email = req.body.email;
    //无论是用户名，密码，确认密码，邮箱，只要有一个不填就不能提交
    if(name==''|| password=='' || password_re==''||email==''){
      req.flash('error','请正确填写信息');
      return res.redirect('/reg');
    }
    //1.首先检查一下两次密码是否一样
    if(password !=password_re){
      //先保存错误的信息
      req.flash('error','用户两次输入的密码不一致');
      return res.redirect('reg');
    }
    //2.对密码进行加密处理
    var md5 =crypto.createHash('md5');
    var password =md5.update(req.body.password).digest('hex');
    //3.实例化User对象
    var newUser = new User({
      name:name,
      password:password,
      email:email
    });
    //4.检查用户名是否存在
    User.get(newUser.name,function (err,user) {
      //如果发生了错误,跳转回首页
      if(err){
        req.flash('error',err);
        return res.redirect('/reg');
      }
      //如果存在重复的用户名
      if(user){
        req.flash('error','用户名已经存在');
      }
      //正确的情况
      newUser.save(function (err,user) {
        if(err){
          req.flash('error',err);
        }
        //用户信息存入session
        req.session.user=newUser;
        req.flash('success','注册成功');
        res.redirect('/regin');
      })

    })
  });
  //登录页面
  app.get('/login',function(req,res){
    res.render('login',{
      title:'登录',
      user:req.session.user,
      success:req.flash('success').toString(),
      error:req.flash('error').toString()
    });
  });
  //登录行为
  app.post('/login',function(req,res){
    //1.检查下用户名有没有
    //2.检查下密码对不对
    //3.存储到session中用户的登录信息
    //4.跳转到首页
    var md5 = crypto.createHash('md5');
    var password =md5.update(req.body.password).digest('hex');
    User.get(req.body.name,function (err,user) {
      if(!user){
        //用户不存在
        req.flash('error','用户不存在');
        return res.redirect('/');
      }
      //判断两次密码是否一致
      if(password !=user.password){
        req.flash('error','密码错误');
        return res.redirect('/');
      }
      //把信息存入到session
      req.session.user =user;
      req.flash('success','登录成功');
      res.redirect('dlh');

    })
  });
  //获取页数，并且分页
  app.get('/dlh',function(req,res){
    var page =parseInt(req.query.p) || 1;
    Post.getTen(null,page,function (err,posts,total) {
      if(err){
        posts = [];
      }
      res.render('dlh',{
        title:'首页',
        user:req.session.user,
        total:total,
        page:page,
        posts:posts,
        isFirstPage: (page - 1) == 0,
        isLastPage: (page - 1)*3 + posts.length == total,
        success:req.flash('success').toString(),
        error:req.flash('error').toString()
      })
    });
  });
  //发表页面
  app.get('/post',function(req,res){
    res.render('post',{
      title:'发表',
      user:req.session.user,
      success:req.flash('success').toString(),
      error:req.flash('error').toString()
    })
  });
  //发表行为
  app.post('/post',function(req,res){
    //当前SESSION里面的用户信息
    var currentUser = req.session.user;
    //判断一下内容不能为空
    if(req.body.title == '' || req.body.post == ''){
      req.flash('error','内容不能为空');
      return res.redirect('/post');
    }
    //添加一下标签信息
    var tags = [req.body.tag1,req.body.tag2,req.body.tag3];
    var post = new Post(currentUser.name,req.body.title,tags,req.body.post);
    post.save(function(err){
      if(err){
        req.flash('error',err);
        return res.redirect('/dlh');
      }
      req.flash('success','发布成功');
      res.redirect('/dlh');
    })
  });
  //上传页面
  app.get('/upload',function (req,res) {
    res.render('upload',{
      title:'上传',
      user:req.session.user,
      success:req.flash('success').toString(),
      error:req.flash('error').toString()
    })
  });
  //上传行为
  app.post('/upload',upload.array('field1',5),function (req,res) {
    req.flash('success','文件保存成功');
    res.redirect('/upload');
  });

  //退出
  app.get('/logout',function (req,res) {
    //1.清除session
    //2.给用户提示
    //3.跳转到首页
    req.session.user =null;
    req.flash('success','成功退出');
    res.redirect('/');
  });
  //点击用户名，可以看到用户发布的所有的文章
  app.get('/u/:name',function (req,res) {
    var page =parseInt(req.query.p) || 1;
    User.get(req.params.name,function (err,user) {
      if(!user){
        req.flash('error','用户不存在');
        return res.redirect('/dlh');
      }
      //查询并返回该用户第 page 页的 3 篇文章
      Post.getTen(user.name,page,function (err,posts,total) {
        if(err){
          req.flash('error',err);
          return res.redirect('/dlh');
        }
        res.render('user',{
          title:user.name,
          posts:posts,
          total:total,
          page:page,
          isFirstPage:(page -1 ) == 0,
          isLastPage:((page - 1)*3 + posts.length) == total,
          user:req.session.user,
          success:req.flash('success').toString(),
          error:req.flash('error').toString()
        })
      })

    })
  });
  //点击文章标题获取，文章的信息
  app.get('/u/:name/:minute/:title',function (req,res) {
    Post.getOne(req.params.name,req.params.minute,req.params.title,function (err,post) {
      console.log(post);
      if(err){
        req.flash('error','找不到该文章');
        return res.redirect('/dlh');
      }
      res.render('article',{
        title:req.params.title,
        user:req.session.user,
        post:post,
        success:req.flash('success').toString(),
        error:req.flash('error').toString()

      })
    })
  });
  //文章的留言发布

//文章的留言发布
  app.post('/comment/:name/:minute/:title',function(req,res){
    var date = new Date();
    var time = date.getFullYear() + "-" + (date.getMonth() + 1) + "-" + date.getDate() + " " +
        date.getHours() + ":" + (date.getMinutes() < 10 ? '0' + date.getMinutes() : date.getMinutes());
    var comment = {
      name:req.body.name,
      time:time,
      content:req.body.content
    }
    var newComment = new Comment(req.params.name,req.params.minute,req.params.title,comment);
    newComment.save(function(err){
      if(err){
        req.flash('error',err);
        return res.redirect('back');
      }
      req.flash('success','发布成功');
      res.redirect('back');

    })
  })
    //文章编辑
    app.get('/edit/:name/:minute/:title',function(req,res){
        //获取到当前的用户
        var currentUser = req.session.user;
        Post.edit(currentUser.name,req.params.minute,req.params.title,function(err,post){
            if(err){
                req.flash('error',err);
                return res.redirect('back');
            }
            res.render('edit',{
                title:'编辑文章',
                user:req.session.user,
                post:post,
                success:req.flash('success').toString(),
                error:req.flash('error').toString()
            })
        })
    })
    //文章编辑行为
    app.post('/edit/:name/:minute/:title',function (req,res) {
        Post.update(req.params.name,req.params.minute,req.params.title,req.body.post,function (err) {
            //encodeURI是防止有中文的情况下，对中文的字符进行转义
            var url = encodeURI('/u/' + req.params.name + '/' + req.params.minute + '/' + req.params.title);
            if(err){
                req.flash('error',err);
                return res.redirect(url);
            }
            req.flash('success','编辑成功');
            return res.redirect(url);
        })
    })
  app.get('/remove/:name/:minute/:title',function(req,res){
    Post.remove(req.params.name,req.params.minute,req.params.title,function(err){
      if(err){
        req.flash('error',err);
        return res.redirect('back');
      }
      req.flash('success','删除成功');
      res.redirect('/dlh');
    })
  })
  //文章存档
  app.get('/archive',function(req,res){
    Post.getArchive(function(err,posts){
      if(err){
        req.flash('error',err);
        return res.redirect('/dlh');
      }
      res.render('archive',{
        title:'存档',
        posts:posts,
        user:req.session.user,
        success:req.flash('success').toString(),
        error:req.flash('error').toString()
      })
    })
  })
  //获取标签页
  app.get('/tags',function (req,res) {
    Post.getTags(function (err,posts) {
      if(err){
        req.flash('error',err);
        res.redirect('/dlh');
      }
      res.render('tags',{
        title:'标签',
        posts:posts,
        user:req.session.user,
        success:req.flash('success').toString(),
        error:req.flash('error').toString()
      })
    })
  })
  //获取标签页对应的文章
  app.get('/tags/:tag',function (req,res) {
    Post.getTag(req.params.tag,function (err,posts) {
      if(err){
        req.flash('error',err);
        return res.redirect('/dlh');
      }
      res.render('tag',{
        title:'TAG' + req.params.tag,
        user:req.session.user,
        posts:posts,
        success:req.flash('success').toString(),
        error:req.flash('error').toString()
      })
    })
  })
  //搜索相应的文章
  app.get('/search',function (req,res) {
    Post.search(req.query.keyword,function (err,posts) {
      if(err){
        req.flash('error',err);
        return res.redirect('/dlh');
      }
      res.render('search',{
        title:'SEARCH' + req.session.keyword,
        user:req.session.user,
        posts:posts,
        success:req.flash('success').toString(),
        error:req.flash('error').toString()
      })
    })
  })
  app.get('/book',function(req,res){
    res.render('book');
  });
  app.get('/move',function(req,res){
    res.render('move');
  });
  app.get('/video',function(req,res){
    res.render('video');
  });
  app.get('/mark',function(req,res){
    res.render('mark');
  });
  app.get('/radio',function(req,res){
    res.render('radio');
  });
  app.get('/regin',function(req,res){
    res.render('regin');
  });
    app.get('/music',function (req,res) {
        res.render('music');
    })
};


